题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
代码实现
function NumberOf1(n)
{
var count = 0;
while(n !== 0){
count++;
n = n & (n-1);
}
return count;
}
分析
例如n=13来说,二进制表示为1101,那么:
- n & (n-1) ——> 1101&1100 ——> 1100,count=1
- n & (n-1) ——> 1100&1011 ——> 1000,count=2
- n & (n-1) ——> 1000&0111 ——> 0000,count=3
可以看出来每次与操作都会消灭掉n最右边的1,所以最终可以得出n的二进制表示中有几个1.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。